/**
*   \file   Ellipsoid.h
*   \author Dave Reid
*   \brief  Header file for the Ellipsoid class.
*/
#ifndef __EAGL_ELLIPSOID_H_
#define __EAGL_ELLIPSOID_H_

#include "../types.h"

namespace eagl
{

/**
*   \brief  Class representing an Ellipsoid.
*
*   An Ellipsoid is essentially a Sphere will a different radius for each axis.
*/
class Ellipsoid
{
public:

    /**
    *   \brief  Default constructor.
    */
    Ellipsoid() : m_radii(1.0f, 1.0f, 1.0f)
    {
    }

    /**
    *   \brief  Copy constructor.
    */
    Ellipsoid(const Ellipsoid &Ellipsoid) : m_radii(Ellipsoid.getRadii())
    {
    }

    /**
    *   \brief            Constructor.
    *   \param radii [in] The radii of the Ellipsoid.
    */
    Ellipsoid(const vec3 radii) : m_radii(radii)
    {
    }


    /**
    *   \brief  Retrieves the radii of the Ellipsoid.
    *   \return The radii of the Ellipsoid.
    */
    const vec3 & getRadii() const
    {
        return this->m_radii;
    }

    /**
    *   \brief             Sets the radii of the Ellipsoid
    *   \param  radii [in] The new radii of the Ellipsoid.
    */
    void setRadii(const vec3 &radii)
    {
        this->m_radii = radii;
    }

    /**
    *   \brief         Sets the radii of the Ellipsoid.
    *   \param  x [in] The x radius of the Ellipsoid.
    *   \param  y [in] The y radius of the Ellipsoid.
    *   \param  z [in] The z radius of the Ellipsoid.
    */
    void setRadii(float x, float y, float z)
    {
        this->m_radii.x = x;
        this->m_radii.y = y;
        this->m_radii.z = z;
    }



private:

    /// The radii of the Ellipsoid.
    vec3 m_radii;

};

}


#endif // __EAGL_ELLIPSOID_H_